#!/usr/bin/python3
# -*- coding:utf-8 -*-
import numpy as np
import torch as t

def extract_data():
    # 从二进制文件中读取数据，假设存储的是float16类型的数据
    input_data = np.fromfile("../input/input_x.bin", dtype=np.float16)

    # 假设输入数据的形状为 [127, 127, 127]
    input_data = input_data.reshape(128)  # 调整数据形状，确保它是三维的

    # 从二进制文件中读取数据，假设存储的是float16类型的数据
    result_data = np.fromfile("../output/output.bin", dtype=np.float16)

    # 假设输入数据的形状为 [127, 127, 127]
    result_data = result_data.reshape(128)  # 调整数据形状，确保它是三维的
    print(f"计算结果: {result_data}")

    

    # 提取所需的数据，选择 [126][126][0] 到 [126][126][126] 的所有值
    extracted_data = input_data  # 提取最后一行数据
    
    print(f"原始数据: {extracted_data}")

    # 将 NumPy 数组转换为 PyTorch 张量
    tensor_data = t.from_numpy(extracted_data)
    
    
    # 对数据进行 softmax 操作
    # test_data = t.softmax(tensor_data, dim=-1)  # 对最后一个维度进行 softmax
    # 输出每个元素的占比
    # print(f"直接Softmax结果: {test_data.numpy()}")

    # 转换为 PyTorch Tensor
    tensor_data = t.from_numpy(extracted_data)

    # 计算最大值
    max_value = tensor_data.max()

    # 对每个元素减去最大值
    adjusted_data = tensor_data - max_value

    # 对结果计算 e 为底数的指数
    exp_data = t.exp(adjusted_data)  # e^(x - max)

    # 计算所有元素的指数之和
    exp_sum = exp_data.sum()
    print(f"直接Softmax结果: {exp_sum.numpy()}")

    # Softmax 操作：每个元素占总元素的比例
    softmax_data = exp_data / exp_sum  # 每个元素占比



    # 输出每个元素的占比
    # print(f"Softmax结果: {softmax_data.numpy()}")

if __name__ == "__main__":
    extract_data()
